package com.zm.oes.serviceimpl;

import com.zm.oes.entity.Admin;
import com.zm.oes.mapper.AdminMapper;
import com.zm.oes.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AdminServiceImpl implements AdminService {

    //使用了 Spring 的依赖注入，通过 @Autowired 注解将 AdminMapper 注
    // 入到 AdminServiceImpl 中，以便在服务类中使用数据库访问操作
    @Autowired
    private AdminMapper adminMapper;

    //findAll 方法是实现了 AdminService 接口的方法，用于获取所有管理员的信息
    //调用了 adminMapper 的 findAll 方法，该方法执行数据库查询操作，返回所有管理员的信息列表
    @Override
    public List<Admin> findAll() {
        return adminMapper.findAll();
    }

    /**
     * findById 方法是实现了 AdminService 接口的方法，用于根据管理员ID查找管理员信息
     * 调用了 adminMapper 的 findById 方法，该方法执行数据库查询操作，根据管理员ID查找对应的管理员信息并返回
     */
    @Override
    public Admin findById(Integer adminId) {
        return adminMapper.findById(adminId);
    }

    /**
     * deleteById 方法是实现了 AdminService 接口的方法，用于根据管理员ID删除管理员信息
     * 调用了 adminMapper 的 deleteById 方法，该方法执行数据库删除操作，删除指定ID的管理员信息，并返回删除操作影响的行数
     */
    @Override
    public int deleteById(int adminId) {
        return adminMapper.deleteById(adminId);
    }

    /**
     * update 方法是实现了 AdminService 接口的方法，用于更新管理员信息
     * 调用了 adminMapper 的 update 方法，该方法执行数据库更新操作，将传入的管理员信息更新到数据库中
     */
    @Override
    public int update(Admin admin) {
        return adminMapper.update(admin);
    }

    /**
     * add 方法是实现了 AdminService 接口的方法，用于添加新的管理员信息
     *
     */
    @Override
    public int add(Admin admin) {
        return 0;
//        return adminMapper.add(admin);
    }

    /**
     * resetPsw 方法是实现了 AdminService 接口的方法，用于重置管理员密码
     * 先根据管理员ID查找管理员信息，然后比较输入的原密码是否与数据库中的密码匹配，如果不匹配则返回错误信息
     * 如果匹配则将新密码更新到数据库中并返回成功信息
     */
    @Override
    public Object resetPsw(Integer adminId, String newPsw, String oldPsw) {
        Admin admin = findById(adminId);

        if(!admin.getPwd().equals(oldPsw)) {
            return "原密码错误";
        }
        admin.setPwd(String.valueOf(newPsw));
        update(admin);
        return true;
    }

}
